'''
Created on 11/06/2011

@author: Jose Rodriguez Shaw, Sebastian Caredio, Agustin Ventura
'''
import generator
import translator
import lambdaVerifier

'''        
Esta funcion se encarga de generar los casos de prueba. La idea es que se le pasen por parametro:
la cantidad de casos (cantCasos), la Semilla con la que se controlara la pseudo aleatoriedad para
la generacion de la experesion booleana (semilla), la profundidad del los arboles que se generaran
para los casos de prueba (profundidad) y el valor de verdad que se desea que tome la expresion 
booleana (truthValue).
'''
def generadorCasosPrueba(cantCasos, semilla, profundidad, truthValue):
    lista = []
    i = 1
    for caso in xrange(cantCasos):
        #creo un arbol
        arbolResultado = generator.genExpression(profundidad, truthValue, semilla)
        #imprimo un arbol en inorden
        print(i,' - Arbol de la expresion booleana: ', arbolResultado.inOrden())
        arbolFinal = translator.translate(arbolResultado)
        print(i,' - Arbol traducido a de Bruijn: ',arbolFinal.inOrden())
        lista.append(arbolFinal)
        semilla = semilla + 100
        i = i + 1
    return lista 
    
'''
Esta funcion recibe una lista de casos de prueba y aplica las reducciones a cada uno de los arboles de Bruijn 
'''
def reduccionCasosPrueba(cantCasos, semilla, profundidad, truthValue):
    lista = generadorCasosPrueba(cantCasos, semilla, profundidad, truthValue)
    i = 1
    for arbolFinal in (lista):
        reducedTree = lambdaVerifier.reductTree(arbolFinal)
        #verifico si el arbol reducido corresponde al valor de verdad
        if (truthValue == 'FALSE'):
            print (i,' - ', lambdaVerifier.verify(False, reducedTree))
        elif (truthValue == 'TRUE'):
            print (i,' - ',lambdaVerifier.verify(True, reducedTree))
        else:
            print('Error en el valor de verdad definido')    
        i = i + 1
'''
ejecucion
'''
cantCasos = 10
semilla = 10000
profundidad = 5
truthValue = 'TRUE'
#generadorCasosPrueba(cantCasos, semilla, profundidad, truthValue)
reduccionCasosPrueba(cantCasos, semilla, profundidad, truthValue)